package com.brillilab.service.core.lab;

import java.util.List;

import com.brillilab.common.entity.PageVo;
import com.brillilab.domain.pa.lab.LabUserCardPa;
import com.brillilab.domain.po.lab.LabUserCard;
import com.brillilab.domain.vo.lab.LabMemberCardVo;
import com.brillilab.domain.vo.lab.LabUserCardVo;

/**
 * 实验室用户卡关系Service
 * @author lj
 *
 */
public interface ILabUserCardService {
	/**
	 * 实验室磁卡授权
	 * @param labId 实验室Id
	 * @param cardNo 磁卡号
	 * @param certigier 授权人
	 * @return Integer 0-授权失败,1-授权成功，2-已被授权
	 */
	LabUserCard empowerCard(Long labId,String cardNo,String certigier);

	/**
	 * 用户磁卡绑定
	 * @param labId 实验室ID
	 * @param cardNo 磁卡号
	 * @param userId 用户ID
	 * @return Integer 0-绑定失败,1-绑定成功，2-未被授权,3-已被绑定
	 */
	LabUserCard bindCard(Long labId, String cardNo, Long userId);
	
	/**
	 * 用户磁卡解绑
	 * @param labId 实验室ID
	 * @param cardNo 磁卡号
	 * @param userId 用户ID
	 * @return Integer 0-解绑失败,1-解绑成功,2-无绑定信息
	 */
	LabUserCard unbindCard(Long labId,String cardNo, Long userId);
	
	/**
	 * 查询用户卡关系
	 * @param labId 实验室ID
	 * @param cardNo 磁卡号
	 * @return
	 */
	LabUserCard selectCard(Long labId,String cardNo);
	
	/**
	 * 分页查询用户卡关系
	 * @param cardPa 参数对象
	 * @return
	 */
	PageVo<LabUserCardVo> selectPage(LabUserCardPa cardPa);

	/**
	 * 通过磁卡号查找磁卡
	 * @param cardNo
	 * @return
	 */
    LabUserCard selectCard(String cardNo);

    LabUserCard forceBindCard(Long labId,String cardNo,Long userId);

	boolean resetCard(Long labId,String cardNo);

	/**
     * 获取卡与实验室成员关系列表
    * @param deviceNo
    * @return
    */
	List<LabMemberCardVo> memberCardList(Long labId);

    List<LabUserCard> selectListByLabIdInUserIds(Long labId,List<Long> userIds);

	LabUserCard selectListByLabIdAndUserId(Long labId,Long userId);
}
